;9-5.asm  开窗口显示时钟计数器当前值和计数差值。
include 9004.mac
.model small
.data
letter1 db 'count1=  ','$' 
letter2 db 'count2=  ','$'
letter3 db 'total=  ','$'
higher1  dw ?
lower1 dw ?		
higher2  dw ?
lower2 dw ?
total dw ?
.code

;==== 新增：显示子程序 (替换宏) ====
disp_2_10 proc 
store_ss						;保护现场
mov ax,bx						;bx传参
mov cx,0
mov bx,10						;将ax变为十进制数
let1:
mov dx,0
inc cx							;统计余数个数
idiv bx							;除以10，商在AX，余数在DX
push dx							;保存余数
cmp ax,0
jnz let1
let2:							;显示结果
pop ax							;将余数弹入ax
add ax,0030h					;调整为ASCII码
mov dl,al
mov ah,2						;显示余数
int 21h
loop let2
restore_ss						;恢复现场
ret
disp_2_10 endp
;==== 子程序定义结束 ====

start:
mov ax,@data			
mov ds,ax	
clearsc							;清屏
clearsw	2,50,6,78,6fh			;开窗口,棕底白字	
cursor  3,51						;置光标
mov ah,9
mov dx,offset letter1				;显示字符串1
int 21h


;读取时钟计数器当前值并显示
mov ah,00h						;CX=计数值高字，DX=计数值低字
int 1ah
mov higher1,cx
mov lower1,dx

;再次读取
reptt:
mov ah,00h						;CX=计数值高字，DX=计数值低字
int 1ah
mov higher2,cx
mov lower2,dx


mov ax,lower2
sub ax,lower1						;差值
cmp ax,36							;2秒间隔
jl reptt
mov total,ax
;调用disp_2_10显示子程序


mov bx,higher1
call disp_2_10					;高位
displ '/'							;显示/
mov bx,lower1
call disp_2_10					;低位
;显示第二次计数值
cursor  4,51						;置光标
mov ah,9
mov dx,offset letter2				;显示字符串2
int 21h
mov bx,higher2
call disp_2_10					;高位
displ '/'							;显示/
mov bx,lower2
call disp_2_10					;低位
;显示差值总数
cursor  5,51						;置光标
mov ah,9
mov dx,offset letter3				;显示字符串3
int 21h
mov bx,total
call disp_2_10					;计数差值
out1:
mov ah,4ch
int 21h
end start
